function [cluster,V,D,s] = unnormSpectralClustering(X,varargin)
    par.k = 5;
    par.similarity = 'gaussianSimilarity';
    par.laplacian = 'graphLaplacian';
    par.normalize = 'unnorm';
    par.max_iter = 1e2;
    par = process_parameter(par, varargin{:});

    switch par.similarity
      case 'X' % X is the similarity matrix
        L = eval([par.laplacian '(X,varargin{:})']);
        s = sum(X,2);
      otherwise
        S = eval([par.similarity '(X,varargin{:})']);
        L = eval([par.laplacian '(S,varargin{:})']);
        s = sum(S,2);
    end

    [V,D] = eigs(L,par.k+1,'SM');
    V=V(:,2:end);
    switch par.normalize
      case 'symnorm'
        sV = sum(V.^2,2);
        V = V ./ repmat(sV, 1, size(V,2));
    end
    opt = statset('MaxIter', par.max_iter);
    cluster = kmeans(V, par.k, 'options', opt, 'EmptyAction', 'singleton');
end
